//返回字段定义
    //  type：0 进入聊天室 1.离开聊天室 2.正常聊天
    //  msg：消息
    //  time：时间
 

const ws = require('nodejs-websocket')
//总的连接用户数量
let count = 0
//刚开始进入时的状态
//刚进入时
const Type_Enter = 0;
const Type_leave = 1;
const Type_Normal = 2;

//每个连接到服务器的用户，都会有一个conn
const server = ws.createServer(conn =>{
//    console.log(conn)
   count++
   conn.userName = `用户${count}`
//    broadcast({
//        type:Type_Enter, 
//        msg:`${conn.userName}进入了聊天室`,
//        time:new Date().toLocaleDateString()
//    })
   console.log(conn)
//    1.告诉所有用户，有人加入聊天室
   //接收到浏览器的数据
   conn.on('text',data =>{
       //2.当接收到某一用户的信息的时候，广播给所有用户，发送的消息是什么
       console.log('接收到用户消息')
       let JSON_parse = JSON.parse(data)
      
      //第一次连接
      if(JSON_parse.state ==0){
        JSON_parse.user_message = `${JSON_parse.user_Name}进入聊天室`
        broadcast({
            type:Type_Enter, 
            msg:JSON_parse,
            time:new Date().toLocaleTimeString()
        })
      }else if(JSON_parse.state == 2){
        JSON_parse.user_message = JSON_parse.user_message
        broadcast({
            type:Type_Normal, 
            msg:JSON_parse,
            time:new Date().toLocaleTimeString()
        })
      }
       
   })
   //关闭连接时触发
   conn.on('close',data =>{
    count--
    // 3.某一用户离开的时候，也通知所有用户
    broadcast({
        type:Type_leave, 
        msg:`${conn.userName}离开了聊天室`,
        time:new Date().toLocaleDateString()
    })
   })
   //连接产生错误时触发
   conn.on('error',data =>{})
})

server.listen(3000, () =>{
    console.log('聊天室服务器连接成功');
    
})

//广播，给所有用户发送消息
function broadcast(msg){
    server.connections.forEach(user =>{
        user.send(JSON.stringify(msg))
    })
}